H5唤醒APP 简单hacker方法
本质上浏览器是通过URLscheme打开APP,一个APP可以设置一个或多个打开自己的URL scheme。类似于zhihu://
1 | const APPRouter = (router: string) => { |
安卓设置的原理:
如果设置比较小的运行间隔(<30ms),在浏览器或者webview中,应用切换到后台,setInterval会被很明显的延迟执行,比如设置一个运行间隔20ms,总计运行100次的定时器,如果页面一直处于前台,则100次跑完,总耗时与100x20=2000ms不会有太大差异,但页面在后台运行时,此时间会明显超过2000ms。可以利用这一点来实现是否成功打开APP检测及回调。
1 | var t = Date.now() |
苹果设置的原理:
APP已安装这是没问题的,但如果APP未安装,跳App Store 的请求会失败。 这时可以使用两个定时器
1 | setTimeout(() => { |
Iframe
1 | var ifm = document.createElement('iframe'); |
引导页
1 | const H5ToApp = () => { |
总结
坑很多,问题主要在安卓上,会有各种兼容问题,机型浏览器众多。当然ios也有。
知乎的解决办法是,提供两个按钮,一个下载,一个打开APP,让用户自己选。